<?php

namespace yphp;

class Course extends Instance
{
    // 匿名函数
    private $func;
    // 参数数组
    private $args = [];

    //构造函数
    function construct($func)
    {
        $this->func = $func;
        return false;
    }

    // 设置参数
    function args()
    {
        $this->args = func_get_args();
        return $this;
    }

    // 传入参数列表并覆盖
    function once($args)
    {
        $this->args = $args;
        return $this;
    }

    // 追加参数
    function push()
    {
        foreach (func_get_args() as $arg) {
            $this->args[] = $arg;
        }
        return $this;
    }

    // 删除最后一个参数
    function pop()
    {
        array_pop($this->args);
        return $this;
    }

    // 删除首个参数
    function shift()
    {
        array_shift($this->args);
        return $this;
    }

    // 追加参数到开头
    function unShift()
    {
        $this->args = array_merge(func_get_args(), $this->args);
        return $this;
    }

    // 显示参数
    function show()
    {
        return $this->args;
    }

    // 执行匿名函数
    function run()
    {
        return call_user_func_array($this->func, $this->args);
    }

    // 缓存匿名函数
    function buffer($all = false)
    {
        ob_start();
        $run = $this->toString($this->run());
        $content = ob_get_clean();
        return $all ? $content . $run : $content;
    }

    function toString($data)
    {
        return $data ? is_scalar($data) ? (string)$data : json_encode($data) : '';
    }

}